<<<<<<< HEAD
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.6     ✓ dplyr   1.0.8
## ✓ tidyr   1.1.4     ✓ stringr 1.4.0
## ✓ readr   2.1.1     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
## Loading required package: viridisLite
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
## 
## Attaching package: 'maps'
## The following object is masked from 'package:viridis':
## 
##     unemp
## The following object is masked from 'package:purrr':
## 
##     map
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
## 
## Attaching package: 'ggmap'
## The following object is masked from 'package:plotly':
## 
##     wind

!(headlines_graphic)

======= >>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957

Women in Headlines Data

The data taken involved the frequency of words used sorted by theme and frequency of words by country. The themes are crime and violence, empowerment, female stereotypes, people and places, race, ethnicity and identity, and no theme. The words were also ranked by theme based on frequency of word use. The news sites were also assigned values for bias and polarity, the calculations are explained at the bottom of the article. There are also headline examples which are individually given a bias score.


Words Appearing in Headlines

Freqency per Theme

A cumulative bar graph for the words used to describe women used in headlines. They are divided into 5 main categories with crime and violence having the most words and the highest frequency. The graph is interactive so each word can be highlighted with the individual word and frequency.
<<<<<<< HEAD
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957

Top Five Words per Theme

The words taken from headlines across different news sites were sorted into theme categories and ranked by occurrence. The following column chart describes the top five words used sorted by theme with the word ‘man’ appearing almost triple the average word use. Crime and violence have the highest average word count of any theme.


Data taken by Country

Country Map

Data was taken from news sites from four different countries with varying numbers of news sources used. From the United States of America, 86 new sites were used. From the United Kingdom, 41 news sites were used. From South Africa, 23 news sites were used. From India, 36 news sites were used.

A world map with the USA, the UK, South Africa, and India colored in green to signify where data was taken from.

Bias Score by Country

The average bias of news sites often varies from the minimum and maximum bias values given to different headlines. The following column chart displays the mean bias by country along with the maximum bias of a headline published by a site in the country. The minimum bias score is zero for all countries so no visual representation was added.
<<<<<<< HEAD

=======

>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957

Polarity of Words

Polarity over Time

In this graph, we visualize how the polarity of headlines has changed over the past ten years. The polarity scores represent how sensationalized a headline is. Sensational headlines sacrifice accuracy in an attempt to provoke an emotional response from readers. They are designed to generate interest through emotional manipulation. In general, the polarity of news headlines about women is higher than the polarity for other headlines. In the past ten years, polarity has increased, and the difference between the polarity of headlines about women and the polarity of general headlines has widened.
<<<<<<< HEAD
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

=======

>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957

Polarity of News Sites

In the graph below, the difference in the average polarity score between headlines about women and other headlines are shown for each site. The sites are ordered by the largest average polarity of headlines about women. Almost every site’s headlines about women are more polarizing than their headlines about other topics.


Headline Examples

<<<<<<< HEAD
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
Least Biased Headline Examples
Headline Site Country Bias
'Lady Bird' buzzes through young sexuality iol.co.za South Africa 0
American Woman, Divorced From Saudi Husband, Is Trapped in Saudi Arabia msn.com India 0
'SA poorer without her' SACP reacts to Madikizela Mandela's death News24.com South Africa 0
<<<<<<< HEAD
=======
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957
Most Biased Headline Examples
Headline Site Country Bias
Girl with severe eczema told her mum she 'didn't want to look at herself in the mirror' she's now a model manchestereveningnews.co.uk UK 1.000
A Mother Said Her 9 Year Old Daughter Killed Herself Because She Was Bullied For Being Friends With A White Boy buzzfeed.com UK 0.833
Woman reunited with her long lost brother reveals surprise as she discovers she's now her SISTER dailyrecord.co.uk UK 0.833

More Data Information

Data Calculations

POLARITY CALCULATIONS

We measure polarity by performing sentiment analysis on each headline using the Vader python package, where each headline gets a sentiment score from -1 to 1 (from more negative to more positive). Because we are interested in polarity, we take the absolute value of each headline’s score.

BIAS CALCULATIONS

We measure gender bias by tracking the combined occurrence of gendered language and social stereotypes usually associated with women. We do this in two steps:

  1. We check if a headline contains gendered language (i.e. “spokeswoman,” “chairwoman,” “she,” “her,” “bride,” “daughter,” “daughters,” “female,” “fiancee,” “girl,” “girlfriend” etc.).

  2. If it contains gendered language, we then count the number of words that are considered to be social stereotypes about women (i.e. “weak,” “modest,” “virgin,” “slut,” “whore,” “sexy,” “feminine,” “sensitive,” “emotional,” “gentle,” “soft,” “pretty,” “bitch,” “sexual” etc.).

Finally, we normalize this count for all headlines within each outlet as a score between 0 and 1, and we aggregate (i.e. average) this score for each outlet.

<<<<<<< HEAD
LS0tCnRpdGxlOiAiSGVhZGxpbmVzIgphdXRob3I6Ci0gbmFtZTogIkF1ZHJleSBTbXljemVrIgotIG5hbWU6ICJFbGxlcnkgSXNsYW5kIgpkYXRlOiAiNC8yOC8yMDIyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG89RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKSAgICAgIyBmb3IgZ3JhcGhpbmcgYW5kIGRhdGEgY2xlYW5pbmcKbGlicmFyeShsdWJyaWRhdGUpICAgICAjIGZvciBkYXRlIG1hbmlwdWxhdGlvbgpsaWJyYXJ5KGdndGhlbWVzKSAgICAgICMgZm9yIGV2ZW4gbW9yZSBwbG90dGluZyB0aGVtZXMKbGlicmFyeShnZ2FuaW1hdGUpICAgICAjIGZvciBhZGRpbmcgYW5pbWF0aW9uIGxheWVycyB0byBnZ3Bsb3RzCmxpYnJhcnkoUkNvbG9yQnJld2VyKSAgIyBmb3IgY29sb3IgcGFsZXR0ZXMKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHBsb3RseSkgICAgICAgICMgZm9yIHRoZSBnZ3Bsb3RseSgpIC0gYmFzaWMgaW50ZXJhY3Rpdml0eQpsaWJyYXJ5KGdnYW5pbWF0ZSkgICAgICMgZm9yIGFkZGluZyBhbmltYXRpb24gbGF5ZXJzIHRvIGdncGxvdHMKbGlicmFyeSh0cmFuc2Zvcm1yKSAgICAjIGZvciAidHdlZW5pbmciIChnZ2FuaW1hdGUpCmxpYnJhcnkoZ2lmc2tpKSAgICAgICAgIyBuZWVkIHRoZSBsaWJyYXJ5IGZvciBjcmVhdGluZyBnaWZzIGJ1dCBkb24ndCBuZWVkIHRvIGxvYWQgZWFjaCB0aW1lCmxpYnJhcnkoZ3QpCmxpYnJhcnkobWFwcykKbGlicmFyeShnZ21hcCkKdGhlbWVfc2V0KHRoZW1lX21pbmltYWwoKSkgIyBNeSBmYXZvcml0ZSBnZ3Bsb3QoKSB0aGVtZSA6KQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFfQpmcmVxX3RoZW1lX3dvcmRzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3dvcmRfdGhlbWVzX2ZyZXEuY3N2IikKZnJlcV9jb3VudHJ5X3dvcmRzIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3dvcmRfY291bnRyeV9mcmVxLmNzdiIpCmhlYWRsaW5lX3NpdGUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvaGVhZGxpbmVzX3NpdGUuY3N2IikKd29yZF90aGVtZV9yYW5rIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGhlLXB1ZGRpbmcvZGF0YS9tYXN0ZXIvd29tZW4taW4taGVhZGxpbmVzL3dvcmRfdGhlbWVzX3JhbmsuY3N2IikKaGVhZGxpbmVfZXhhbXBsZXMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvaGVhZGxpbmVzLmNzdiIpCnBvbGFyaXR5X3NpdGUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvcG9sYXJpdHlfY29tcGFyaXNvbl9zaXRlX2NvdW50cnlfdGltZS5jc3YiKQpwb2xhcml0eV9vdmVyX3RpbWUgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvcG9sYXJpdHlfY29tcGFyaXNvbl9jb3VudHJ5X3RpbWUuY3N2IikKYGBgCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KcGl2b3RfY291bnRyeV93b3JkIDwtIGZyZXFfY291bnRyeV93b3JkcyAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtY291bnRyeSwKICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAid29yZCIsCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJudW1iZXIiKSAlPiUgCiAgZmlsdGVyKHdvcmQgIT0gIlgiKSAlPiUgCiAgbmEub21pdCgpCmBgYAoKCiEoaGVhZGxpbmVzX2dyYXBoaWMpCgoKIyMgV29tZW4gaW4gSGVhZGxpbmVzIERhdGEKCiMjIyMgVGhlIGRhdGEgdGFrZW4gaW52b2x2ZWQgdGhlIGZyZXF1ZW5jeSBvZiB3b3JkcyB1c2VkIHNvcnRlZCBieSB0aGVtZSBhbmQgZnJlcXVlbmN5IG9mIHdvcmRzIGJ5IGNvdW50cnkuIFRoZSB0aGVtZXMgYXJlIGNyaW1lIGFuZCB2aW9sZW5jZSwgZW1wb3dlcm1lbnQsIGZlbWFsZSBzdGVyZW90eXBlcywgcGVvcGxlIGFuZCBwbGFjZXMsIHJhY2UsIGV0aG5pY2l0eSBhbmQgaWRlbnRpdHksIGFuZCBubyB0aGVtZS4gVGhlIHdvcmRzIHdlcmUgYWxzbyByYW5rZWQgYnkgdGhlbWUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIHdvcmQgdXNlLiBUaGUgbmV3cyBzaXRlcyB3ZXJlIGFsc28gYXNzaWduZWQgdmFsdWVzIGZvciBiaWFzIGFuZCBwb2xhcml0eSwgdGhlIGNhbGN1bGF0aW9ucyBhcmUgZXhwbGFpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGFydGljbGUuIFRoZXJlIGFyZSBhbHNvIGhlYWRsaW5lIGV4YW1wbGVzIHdoaWNoIGFyZSBpbmRpdmlkdWFsbHkgZ2l2ZW4gYSBiaWFzIHNjb3JlLgpcbgoKKioqCgoKIyMgV29yZHMgdXNlZCBpbiBIZWFkbGluZXMKXG4KIyMjIEZyZXFlbmN5IHBlciBUaGVtZSBcbgojIyMjIyBBIGN1bXVsYXRpdmUgYmFyIGdyYXBoIGZvciB0aGUgd29yZHMgdXNlZCB0byBkZXNjcmliZSB3b21lbiB1c2VkIGluIGhlYWRsaW5lcy4gVGhleSBhcmUgZGl2aWRlZCBpbnRvIDUgbWFpbiBjYXRlZ29yaWVzIHdpdGggY3JpbWUgYW5kIHZpb2xlbmNlIGhhdmluZyB0aGUgbW9zdCB3b3JkcyBhbmQgdGhlIGhpZ2hlc3QgZnJlcXVlbmN5LiBUaGUgZ3JhcGggaXMgaW50ZXJhY3RpdmUgc28gZWFjaCB3b3JkIGNhbiBiZSBoaWdobGlnaHRlZCB3aXRoIHRoZSBpbmRpdmlkdWFsIHdvcmQgYW5kIGZyZXF1ZW5jeS4KXG4KCgpgYGB7ciwgZWNobz1GQUxTRX0KcGl2b3Rfd29yZHMgPC0gZnJlcV90aGVtZV93b3JkcyAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtdGhlbWUsCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIndvcmQiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZnJlcSIpICU+JSAKICBuYS5vbWl0KCkKCndvcmRfcGxvdCA8LSBwaXZvdF93b3JkcyAlPiUgCiAgZmlsdGVyKHRoZW1lICE9ICJObyB0aGVtZSIpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSB0aGVtZSwgCiAgICAgICAgICAgICB5ID0gZnJlcSwgCiAgICAgICAgICAgICBmaWxsID0gZmN0X3Jlb3JkZXIod29yZCwgZnJlcSksCiAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUoIndvcmQ6Iiwgd29yZCkpKSArCiAgICBnZW9tX2NvbChjb2xvciA9ICJibGFjayIpICsKICAgIHNjYWxlX2ZpbGxfdmlyaWRpc19kKG9wdGlvbiA9ICJ2aXJpZGlzIikgKwogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICBsYWJzKHRpdGxlID0gIkN1bXVsYXRpdmUgRnJlcXVlbmN5IG9mIFdvcmRzIGRlc2NyaWJpbmcgV29tZW4gaW4gSGVhZGxpbmVzIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiRnJlcXVlbmN5IikrCiAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCgpnZ3Bsb3RseSh3b3JkX3Bsb3QsCiAgICAgICAgIHRvb2x0aXAgPSBjKCJ5IiwgInRleHQiKSkKYGBgCgojIyMgVG9wIEZpdmUgV29yZHMgcGVyIFRoZW1lCiMjIyMjIFRoZSB3b3JkcyB0YWtlbiBmcm9tIGhlYWRsaW5lcyBhY3Jvc3MgZGlmZmVyZW50IG5ld3Mgc2l0ZXMgd2VyZSBzb3J0ZWQgaW50byB0aGVtZSBjYXRlZ29yaWVzIGFuZCByYW5rZWQgYnkgb2NjdXJyZW5jZS4gVGhlIGZvbGxvd2luZyBjb2x1bW4gY2hhcnQgZGVzY3JpYmVzIHRoZSB0b3AgZml2ZSB3b3JkcyB1c2VkIHNvcnRlZCBieSB0aGVtZSB3aXRoIHRoZSB3b3JkICdtYW4nIGFwcGVhcmluZyBhbG1vc3QgdHJpcGxlIHRoZSBhdmVyYWdlIHdvcmQgdXNlLiBDcmltZSBhbmQgdmlvbGVuY2UgaGF2ZSB0aGUgaGlnaGVzdCBhdmVyYWdlIHdvcmQgY291bnQgb2YgYW55IHRoZW1lLiAKXG4KCmBgYHtyLCBlY2hvPUZBTFNFfQp3b3JkX3RoZW1lX3JhbmsgJT4lIAogIGZpbHRlcihgcmFua2AgPCA2KSAlPiUgCiAgc2VsZWN0KCFgWGApICU+JSAKICBnZ3Bsb3QoYWVzKHkgPSBmY3RfcmVvcmRlcih3b3JkLCB0aGVtZSksIHggPSBjb3VudCkpICsKICBnZW9tX2NvbChhZXMoZmlsbCA9IHRoZW1lKSkrCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Qob3B0aW9uID0gInZpcmlkaXMiKSArCiAgI3RoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGxhYnModGl0bGUgPSAiQ291bnQgb2YgVG9wIDUgd29yZHMgcGVyIFRoZW1lIiwKICAgICAgIHkgPSAiIiwKICAgICAgIHggPSAiIikKYGBgCgoqKiogCgojIyBEYXRhIHRha2VuIGJ5IENvdW50cnkKXG4KCiMjIyBDb3VudHJ5IE1hcFxuCgojIyMjIyBEYXRhIHdhcyB0YWtlbiBmcm9tIG5ld3Mgc2l0ZXMgZnJvbSBmb3VyIGRpZmZlcmVudCBjb3VudHJpZXMgd2l0aCB2YXJ5aW5nIG51bWJlcnMgb2YgbmV3cyBzb3VyY2VzIHVzZWQuIEZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgODYgbmV3IHNpdGVzIHdlcmUgdXNlZC4gRnJvbSB0aGUgVW5pdGVkIEtpbmdkb20sIDQxIG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiBGcm9tIFNvdXRoIEFmcmljYSwgMjMgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIEZyb20gSW5kaWEsIDM2IG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiAKXG4KCmBgYHtyLCBmaWcuYWx0PSAiQSB3b3JsZCBtYXAgd2l0aCB0aGUgVVNBLCB0aGUgVUssIFNvdXRoIEFmcmljYSwgYW5kIEluZGlhIGNvbG9yZWQgaW4gZ3JlZW4gdG8gc2lnbmlmeSB3aGVyZSBkYXRhIHdhcyB0YWtlbiBmcm9tLiIsIGVjaG89RkFMU0V9CndvcmxkX21hcCA8LSBtYXBfZGF0YSgid29ybGQiKQoKaGVhZGxpbmVfc2l0ZSAlPiUgCiAgZ3JvdXBfYnkoY291bnRyeV9vZl9wdWIpICU+JSAKICBzdW1tYXJpc2UoYmlhc19jb3VudHJ5ID0gbWVhbihiaWFzKSkgJT4lIAogIGdncGxvdCgpICsKICAgIGdlb21fbWFwKGRhdGEgPSB3b3JsZF9tYXAsIG1hcCA9IHdvcmxkX21hcCwKICAgICAgICAgICAgIGFlcyhsb25nLCBsYXQsIG1hcF9pZCA9IHJlZ2lvbiksCiAgICAgICAgICAgICBmaWxsID0gImxpZ2h0Z3JheSIpKwogICAgZ2VvbV9tYXAobWFwID0gd29ybGRfbWFwLAogICAgICAgICAgICBhZXMobWFwX2lkID0gYGNvdW50cnlfb2ZfcHViYCksCiAgICAgICAgICAgIGZpbGwgPSAicHVycGxlNCIsCiAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZTQiKSsKICAgIGV4cGFuZF9saW1pdHMoeCA9IHdvcmxkX21hcCRsb25nLCB5ID0gd29ybGRfbWFwJGxhdCkgKyAKICAgIHRoZW1lX21hcCgpCmBgYAoKIyMjIEJpYXMgU2NvcmUgYnkgQ291bnRyeVxuCiMjIyMjIFRoZSBhdmVyYWdlIGJpYXMgb2YgbmV3cyBzaXRlcyBvZnRlbiB2YXJpZXMgZnJvbSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBiaWFzIHZhbHVlcyBnaXZlbiB0byBkaWZmZXJlbnQgaGVhZGxpbmVzLiBUaGUgZm9sbG93aW5nIGNvbHVtbiBjaGFydCBkaXNwbGF5cyB0aGUgbWVhbiBiaWFzIGJ5IGNvdW50cnkgYWxvbmcgd2l0aCB0aGUgbWF4aW11bSBiaWFzIG9mIGEgaGVhZGxpbmUgcHVibGlzaGVkIGJ5IGEgc2l0ZSBpbiB0aGUgY291bnRyeS4gVGhlIG1pbmltdW0gYmlhcyBzY29yZSBpcyB6ZXJvIGZvciBhbGwgY291bnRyaWVzIHNvIG5vIHZpc3VhbCByZXByZXNlbnRhdGlvbiB3YXMgYWRkZWQuClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KaGVhZGxpbmVfc2l0ZSAlPiUKICBncm91cF9ieShjb3VudHJ5X29mX3B1YikgJT4lCiAgc3VtbWFyaXplKG1lYW5fYmlhcyA9IG1lYW4oYmlhcyksIG1heF9iaWFzID0gbWF4KGJpYXMpKSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9jb2woYWVzKHkgPSBjb3VudHJ5X29mX3B1YiwgeCA9IG1heF9iaWFzKSwgZmlsbCA9ICIjYzJiMWUzIiwgd2lkdGggPSAuNzUpKwogIGdlb21fY29sKGFlcyh5ID0gY291bnRyeV9vZl9wdWIsIHggPSBtZWFuX2JpYXMpLCB3aWR0aCA9IC41LCBmaWxsID0gInB1cnBsZTQiKSsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSkrCiAgbGFicyh0aXRsZSA9ICJBdmVyYWdlIGFuZCBNYXhpbXVtIEJpYXMgU2NvcmUgYnkgQ291bnRyeSIsCiAgICAgICB4ID0gIkJpYXMiLAogICAgICAgeSA9ICIiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueSA9IGVsZW1lbnRfYmxhbmsoKSwpCmBgYAoKKioqCgojIyBQb2xhcml0eSBvZiBXb3JkcwpcbgoKIyMjIFBvbGFyaXR5IG92ZXIgVGltZVxuCiMjIyMjIEluIHRoaXMgZ3JhcGgsIHdlIHZpc3VhbGl6ZSBob3cgdGhlIHBvbGFyaXR5IG9mIGhlYWRsaW5lcyBoYXMgY2hhbmdlZCBvdmVyIHRoZSBwYXN0IHRlbiB5ZWFycy4gVGhlIHBvbGFyaXR5IHNjb3JlcyByZXByZXNlbnQgaG93IHNlbnNhdGlvbmFsaXplZCBhIGhlYWRsaW5lIGlzLiBTZW5zYXRpb25hbCBoZWFkbGluZXMgc2FjcmlmaWNlIGFjY3VyYWN5IGluIGFuIGF0dGVtcHQgdG8gcHJvdm9rZSBhbiBlbW90aW9uYWwgcmVzcG9uc2UgZnJvbSByZWFkZXJzLiBUaGV5IGFyZSBkZXNpZ25lZCB0byBnZW5lcmF0ZSBpbnRlcmVzdCB0aHJvdWdoIGVtb3Rpb25hbCBtYW5pcHVsYXRpb24uIEluIGdlbmVyYWwsIHRoZSBwb2xhcml0eSBvZiBuZXdzIGhlYWRsaW5lcyBhYm91dCB3b21lbiBpcyBoaWdoZXIgdGhhbiB0aGUgcG9sYXJpdHkgZm9yIG90aGVyIGhlYWRsaW5lcy4gSW4gdGhlIHBhc3QgdGVuIHllYXJzLCBwb2xhcml0eSBoYXMgaW5jcmVhc2VkLCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFuZCB0aGUgcG9sYXJpdHkgb2YgZ2VuZXJhbCBoZWFkbGluZXMgaGFzIHdpZGVuZWQuClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KcG9sYXJpdHlfb3Zlcl90aW1lICU+JSAKICBncm91cF9ieShgeWVhcmApICU+JSAKICBzdW1tYXJpc2Uod29tZW5fbWVhbiA9IG1lYW4oYHdvbWVuX3BvbGFyaXR5X21lYW5gKSwKICAgICAgICAgICAgYWxsX21lYW4gPSBtZWFuKGBhbGxfcG9sYXJpdHlfbWVhbmApLAogICAgICAgICAgICB5ZWFyKSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9zbW9vdGgoYWVzKHg9YHllYXJgLCB5PWB3b21lbl9tZWFuYCksIGNvbG9yID0gInB1cnBsZTQiLCBzZSA9IEZBTFNFKSsKICBnZW9tX3Ntb290aChhZXMoeD1geWVhcmAsIHk9YGFsbF9tZWFuYCksIGNvbG9yID0gImJsYWNrIiwgc2UgPSBGQUxTRSkrCiAgZ2VvbV9wb2ludChhZXMoeD0yMDIwLjAsIHk9MC40MjUpLCAKICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjYzJiMWUzIiwgCiAgICAgICAgICAgICBzaXplID0gNSwgc3Ryb2tlID0gMiwgc2hhcGUgPSAyMSkgKwogIGdlb21fcG9pbnQoYWVzKHg9MjAyMC4wLCB5PTAuMjgpLCBzaXplID0gMi41KSsKICBnZW9tX2xhYmVsKGxhYmVsID0gIkhlYWRsaW5lcyBhYm91dFxud29tZW4iLCB4PSAyMDE5LjQsIHk9MC40MCwgY29sb3IgPSAicHVycGxlNCIpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0XG5vdGhlciB0b3BpY3MiLCB4PTIwMTkuNCwgeT0gMC4yNSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMjAxMCwgMjAxMiwgMjAxNCwgMjAxNiwgMjAxOCwgMjAyMCkpKwogIGxhYnModGl0bGUgPSAiQXZlcmFnZSBQb2xhcml0eSBvZiBOZXdzIEhlYWRsaW5lcyBvdmVyIFRpbWUiLAogICAgICAgeSA9ICIiLAogICAgICAgeCA9ICIiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLmxpbmUueCA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJibGFjayIpKQpgYGAKCgojIyMgUG9sYXJpdHkgb2YgTmV3cyBTaXRlc1xuCiMjIyMjIEluIHRoZSBncmFwaCBiZWxvdywgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGF2ZXJhZ2UgcG9sYXJpdHkgc2NvcmUgYmV0d2VlbiBoZWFkbGluZXMgYWJvdXQgd29tZW4gYW5kIG90aGVyIGhlYWRsaW5lcyBhcmUgc2hvd24gZm9yIGVhY2ggc2l0ZS4gVGhlIHNpdGVzIGFyZSBvcmRlcmVkIGJ5IHRoZSBsYXJnZXN0IGF2ZXJhZ2UgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGFib3V0IHdvbWVuLiBBbG1vc3QgZXZlcnkgc2l0ZSdzIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhcmUgbW9yZSBwb2xhcml6aW5nIHRoYW4gdGhlaXIgaGVhZGxpbmVzIGFib3V0IG90aGVyIHRvcGljcy4gClxuCgpgYGB7ciwgZmlnLmhlaWdodD0gMjQsIGZpZy53aWR0aD0gOCwgZWNobz1GQUxTRX0KcG9sYXJpdHlfc2l0ZSAlPiUgCiAgZ2dwbG90KCkrCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXBvbGFyaXR5X2Jhc2UsIHhlbmQ9cG9sYXJpdHlfd29tZW4sIHk9ZmN0X3Jlb3JkZXIoc2l0ZSwgcG9sYXJpdHlfd29tZW4pLCB5ZW5kPXNpdGUpLCBzaXplID0gMSkrCiAgZ2VvbV9wb2ludChhZXMoeD1wb2xhcml0eV9iYXNlLCB5ID0gc2l0ZSksIHNpemUgPSAyKSsKICBnZW9tX3BvaW50KGFlcyh4PXBvbGFyaXR5X3dvbWVuLCB5ID0gc2l0ZSksIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjYzJiMWUzIiwgCiAgICAgICAgICAgICBzaXplID0gMywgc3Ryb2tlID0gMSwgc2hhcGUgPSAyMSkrCiAgbGFicyh0aXRsZSA9ICIiLAogICAgICAgeSA9ICIiLAogICAgICAgeCA9ICJQb2xhcml0eSIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKKioqCgojIyBIZWFkbGluZSBFeGFtcGxlc1xuCgpcbgoKYGBge3IsIGVjaG89RkFMU0V9Cmxhc3RfdGhyZWVfaGVhZGxpbmVzIDwtIGhlYWRsaW5lX2V4YW1wbGVzICU+JSAKICByZW5hbWUoIkhlYWRsaW5lIiA9IGBoZWFkbGluZV9ub19zaXRlYCwKICAgICAgICAgIlNpdGUiID0gYHNpdGVgLAogICAgICAgICAiQ291bnRyeSIgPSBgY291bnRyeWAsCiAgICAgICAgICJCaWFzIiA9IGBiaWFzYCkgJT4lCiAgYXJyYW5nZShgQmlhc2ApICU+JQogIGRpc3RpbmN0KFNpdGUsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSAKICBzbGljZSgxOjMpICU+JSAKICBzZWxlY3QoYEhlYWRsaW5lYCwgYFNpdGVgLCBgQ291bnRyeWAsIGBCaWFzYCkKCmxhc3RfdGhyZWVfaGVhZGxpbmVzX3RhYmxlIDwtIGd0KGxhc3RfdGhyZWVfaGVhZGxpbmVzKSAlPiUgCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJMZWFzdCBCaWFzZWQgSGVhZGxpbmUgRXhhbXBsZXMiKSAlPiUgCiAgdGFiX3N0eWxlKHN0eWxlID0gY2VsbF90ZXh0KGNvbG9yID0gInB1cnBsZTQiKSwKICAgICAgICAgICAgbG9jYXRpb25zID0gY2VsbHNfYm9keSgpKQoKbGFzdF90aHJlZV9oZWFkbGluZXNfdGFibGUKYGBgCgpcbgoKYGBge3IsIGVjaG89RkFMU0V9CnRvcF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCkgJT4lIAogIG11dGF0ZShCaWFzID0gcm91bmQoYmlhcywgZGlnaXRzID0gMykpICU+JSAKICBhcnJhbmdlKGRlc2MoYEJpYXNgKSkgJT4lCiAgZGlzdGluY3QoU2l0ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIHNsaWNlKDE6MykgJT4lIAogIHNlbGVjdChgSGVhZGxpbmVgLCBgU2l0ZWAsIGBDb3VudHJ5YCwgYEJpYXNgKQoKdG9wX3RocmVlX2hlYWRsaW5lc190YWJsZSA8LSBndCh0b3BfdGhyZWVfaGVhZGxpbmVzKSAlPiUgCiAgdGFiX2hlYWRlcih0aXRsZSA9ICJNb3N0IEJpYXNlZCBIZWFkbGluZSBFeGFtcGxlcyIpICU+JSAKICB0YWJfc3R5bGUoc3R5bGUgPSBjZWxsX3RleHQoY29sb3IgPSAicHVycGxlNCIpLAogICAgICAgICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KCkpCgp0b3BfdGhyZWVfaGVhZGxpbmVzX3RhYmxlCmBgYApcbgoqKioKCiMjIE1vcmUgRGF0YSBJbmZvcm1hdGlvblxuCiMjIyBEYXRhIENhbGN1bGF0aW9uc1xuCgoKIyMjIyMgUE9MQVJJVFkgQ0FMQ1VMQVRJT05TXG4KV2UgbWVhc3VyZSBwb2xhcml0eSBieSBwZXJmb3JtaW5nIHNlbnRpbWVudCBhbmFseXNpcyBvbiBlYWNoIGhlYWRsaW5lIHVzaW5nIHRoZSBWYWRlciBweXRob24gcGFja2FnZSwgd2hlcmUgZWFjaCBoZWFkbGluZSBnZXRzIGEgc2VudGltZW50IHNjb3JlIGZyb20gLTEgdG8gMSAoZnJvbSBtb3JlIG5lZ2F0aXZlIHRvIG1vcmUgcG9zaXRpdmUpLiBCZWNhdXNlIHdlIGFyZSBpbnRlcmVzdGVkIGluIHBvbGFyaXR5LCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBlYWNoIGhlYWRsaW5lJ3Mgc2NvcmUuXG4KCiMjIyMjIEJJQVMgQ0FMQ1VMQVRJT05TXG4KV2UgbWVhc3VyZSBnZW5kZXIgYmlhcyBieSB0cmFja2luZyB0aGUgY29tYmluZWQgb2NjdXJyZW5jZSBvZiBnZW5kZXJlZCBsYW5ndWFnZSBhbmQgc29jaWFsIHN0ZXJlb3R5cGVzIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIHdvbWVuLiBXZSBkbyB0aGlzIGluIHR3byBzdGVwczpcbgoKMSkgV2UgY2hlY2sgaWYgYSBoZWFkbGluZSBjb250YWlucyBnZW5kZXJlZCBsYW5ndWFnZSAoaS5lLiDigJxzcG9rZXN3b21hbizigJ0g4oCcY2hhaXJ3b21hbizigJ0g4oCcc2hlLOKAnSDigJxoZXIs4oCdIOKAnGJyaWRlLOKAnSDigJxkYXVnaHRlcizigJ0g4oCcZGF1Z2h0ZXJzLOKAnSDigJxmZW1hbGUs4oCdIOKAnGZpYW5jZWUs4oCdIOKAnGdpcmws4oCdIOKAnGdpcmxmcmllbmTigJ0gZXRjLikuXG4KCjIpIElmIGl0IGNvbnRhaW5zIGdlbmRlcmVkIGxhbmd1YWdlLCB3ZSB0aGVuIGNvdW50IHRoZSBudW1iZXIgb2Ygd29yZHMgdGhhdCBhcmUgY29uc2lkZXJlZCB0byBiZSBzb2NpYWwgc3RlcmVvdHlwZXMgYWJvdXQgd29tZW4gKGkuZS4g4oCcd2VhayzigJ0g4oCcbW9kZXN0LOKAnSDigJx2aXJnaW4s4oCdIOKAnHNsdXQs4oCdIOKAnHdob3JlLOKAnSDigJxzZXh5LOKAnSDigJxmZW1pbmluZSzigJ0g4oCcc2Vuc2l0aXZlLOKAnSDigJxlbW90aW9uYWws4oCdIOKAnGdlbnRsZSzigJ0g4oCcc29mdCzigJ0g4oCccHJldHR5LOKAnSDigJxiaXRjaCzigJ0g4oCcc2V4dWFs4oCdIGV0Yy4pLlxuCgpGaW5hbGx5LCB3ZSBub3JtYWxpemUgdGhpcyBjb3VudCBmb3IgYWxsIGhlYWRsaW5lcyB3aXRoaW4gZWFjaCBvdXRsZXQgYXMgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEsIGFuZCB3ZSBhZ2dyZWdhdGUgKGkuZS4gYXZlcmFnZSkgdGhpcyBzY29yZSBmb3IgZWFjaCBvdXRsZXQuXG4KCiMjIyBEYXRhIFNvdXJjZVxuCihzaXRlIGZyb20gcHVkZGluZyBodHRwczovL3B1ZGRpbmcuY29vbC8yMDIyLzAyL3dvbWVuLWluLWhlYWRsaW5lcy8pCgoK
=======
LS0tCnRpdGxlOiAiSGVhZGxpbmVzIgphdXRob3I6Ci0gbmFtZTogIkF1ZHJleSBTbXljemVrIgotIG5hbWU6ICJFbGxlcnkgSXNsYW5kIgpkYXRlOiAiNC8yOC8yMDIyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpICAgICAjIGZvciBncmFwaGluZyBhbmQgZGF0YSBjbGVhbmluZwpsaWJyYXJ5KGx1YnJpZGF0ZSkgICAgICMgZm9yIGRhdGUgbWFuaXB1bGF0aW9uCmxpYnJhcnkoZ2d0aGVtZXMpICAgICAgIyBmb3IgZXZlbiBtb3JlIHBsb3R0aW5nIHRoZW1lcwpsaWJyYXJ5KGdnYW5pbWF0ZSkgICAgICMgZm9yIGFkZGluZyBhbmltYXRpb24gbGF5ZXJzIHRvIGdncGxvdHMKbGlicmFyeShSQ29sb3JCcmV3ZXIpICAjIGZvciBjb2xvciBwYWxldHRlcwpsaWJyYXJ5KHZpcmlkaXMpCmxpYnJhcnkocGxvdGx5KSAgICAgICAgIyBmb3IgdGhlIGdncGxvdGx5KCkgLSBiYXNpYyBpbnRlcmFjdGl2aXR5CmxpYnJhcnkoZ2dhbmltYXRlKSAgICAgIyBmb3IgYWRkaW5nIGFuaW1hdGlvbiBsYXllcnMgdG8gZ2dwbG90cwpsaWJyYXJ5KHRyYW5zZm9ybXIpICAgICMgZm9yICJ0d2VlbmluZyIgKGdnYW5pbWF0ZSkKbGlicmFyeShnaWZza2kpICAgICAgICAjIG5lZWQgdGhlIGxpYnJhcnkgZm9yIGNyZWF0aW5nIGdpZnMgYnV0IGRvbid0IG5lZWQgdG8gbG9hZCBlYWNoIHRpbWUKbGlicmFyeShndCkKbGlicmFyeShtYXBzKQpsaWJyYXJ5KGdnbWFwKQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKSAjIE15IGZhdm9yaXRlIGdncGxvdCgpIHRoZW1lIDopCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsICB3YXJuaW5nID0gRkFMU0UsIHJlc3VsdHM9RkFMU0UsIGNvbW1lbnQ9RkFMU0V9CmZyZXFfdGhlbWVfd29yZHMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvd29yZF90aGVtZXNfZnJlcS5jc3YiKQpmcmVxX2NvdW50cnlfd29yZHMgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvd29yZF9jb3VudHJ5X2ZyZXEuY3N2IikKaGVhZGxpbmVfc2l0ZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9oZWFkbGluZXNfc2l0ZS5jc3YiKQp3b3JkX3RoZW1lX3JhbmsgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90aGUtcHVkZGluZy9kYXRhL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMvd29yZF90aGVtZXNfcmFuay5jc3YiKQpoZWFkbGluZV9leGFtcGxlcyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9oZWFkbGluZXMuY3N2IikKcG9sYXJpdHlfc2l0ZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9wb2xhcml0eV9jb21wYXJpc29uX3NpdGVfY291bnRyeV90aW1lLmNzdiIpCnBvbGFyaXR5X292ZXJfdGltZSA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RoZS1wdWRkaW5nL2RhdGEvbWFzdGVyL3dvbWVuLWluLWhlYWRsaW5lcy9wb2xhcml0eV9jb21wYXJpc29uX2NvdW50cnlfdGltZS5jc3YiKQpgYGAKCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpwaXZvdF9jb3VudHJ5X3dvcmQgPC0gZnJlcV9jb3VudHJ5X3dvcmRzICU+JSAKICBwaXZvdF9sb25nZXIoY29scyA9IC1jb3VudHJ5LAogICAgICAgICAgICAgICBuYW1lc190byA9ICJ3b3JkIiwKICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIm51bWJlciIpICU+JSAKICBmaWx0ZXIod29yZCAhPSAiWCIpICU+JSAKICBuYS5vbWl0KCkKYGBgCgoKIyMgV29tZW4gaW4gSGVhZGxpbmVzIERhdGEKCiMjIyMgVGhlIGRhdGEgdGFrZW4gaW52b2x2ZWQgdGhlIGZyZXF1ZW5jeSBvZiB3b3JkcyB1c2VkIHNvcnRlZCBieSB0aGVtZSBhbmQgZnJlcXVlbmN5IG9mIHdvcmRzIGJ5IGNvdW50cnkuIFRoZSB0aGVtZXMgYXJlIGNyaW1lIGFuZCB2aW9sZW5jZSwgZW1wb3dlcm1lbnQsIGZlbWFsZSBzdGVyZW90eXBlcywgcGVvcGxlIGFuZCBwbGFjZXMsIHJhY2UsIGV0aG5pY2l0eSBhbmQgaWRlbnRpdHksIGFuZCBubyB0aGVtZS4gVGhlIHdvcmRzIHdlcmUgYWxzbyByYW5rZWQgYnkgdGhlbWUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIHdvcmQgdXNlLiBUaGUgbmV3cyBzaXRlcyB3ZXJlIGFsc28gYXNzaWduZWQgdmFsdWVzIGZvciBiaWFzIGFuZCBwb2xhcml0eSwgdGhlIGNhbGN1bGF0aW9ucyBhcmUgZXhwbGFpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGFydGljbGUuIFRoZXJlIGFyZSBhbHNvIGhlYWRsaW5lIGV4YW1wbGVzIHdoaWNoIGFyZSBpbmRpdmlkdWFsbHkgZ2l2ZW4gYSBiaWFzIHNjb3JlLgpcbgoKCiFbXShoZWFkbGluZXNfZ3JhcGhpYy5qcGcpCgoKKioqCgoKIyMgV29yZHMgQXBwZWFyaW5nIGluIEhlYWRsaW5lc1xuCgoKIyMjIEZyZXFlbmN5IHBlciBUaGVtZSBcbgoKIyMjIyMgQSBjdW11bGF0aXZlIGJhciBncmFwaCBmb3IgdGhlIHdvcmRzIHVzZWQgdG8gZGVzY3JpYmUgd29tZW4gdXNlZCBpbiBoZWFkbGluZXMuIFRoZXkgYXJlIGRpdmlkZWQgaW50byA1IG1haW4gY2F0ZWdvcmllcyB3aXRoIGNyaW1lIGFuZCB2aW9sZW5jZSBoYXZpbmcgdGhlIG1vc3Qgd29yZHMgYW5kIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeS4gVGhlIGdyYXBoIGlzIGludGVyYWN0aXZlIHNvIGVhY2ggd29yZCBjYW4gYmUgaGlnaGxpZ2h0ZWQgd2l0aCB0aGUgaW5kaXZpZHVhbCB3b3JkIGFuZCBmcmVxdWVuY3kuXG4KCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGl2b3Rfd29yZHMgPC0gZnJlcV90aGVtZV93b3JkcyAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtdGhlbWUsCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIndvcmQiLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiZnJlcSIpICU+JSAKICBuYS5vbWl0KCkKCndvcmRfcGxvdCA8LSBwaXZvdF93b3JkcyAlPiUgCiAgZmlsdGVyKHRoZW1lICE9ICJObyB0aGVtZSIpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSB0aGVtZSwgCiAgICAgICAgICAgICB5ID0gZnJlcSwgCiAgICAgICAgICAgICBmaWxsID0gZmN0X3Jlb3JkZXIodGhlbWUsIHdvcmQpLAogICAgICAgICAgICAgdGV4dCA9IHBhc3RlKCJ3b3JkOiIsIHdvcmQpKSkgKwogICAgZ2VvbV9jb2woY29sb3IgPSAiYmxhY2siKSArCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNWM3MWQxIiwgIiMzMTQzOTQiLCAiIzU2MjdhOCIsICIjODUzNmNmIiwgIiM5NDJmOTkiLCAiI2E4MzhjOSIpKSArCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgIGxhYnModGl0bGUgPSAiQ3VtdWxhdGl2ZSBGcmVxdWVuY3kgb2YgV29yZHMgZGVzY3JpYmluZyBXb21lbiBpbiBIZWFkbGluZXMiLAogICAgICAgeCA9ICIiLAogICAgICAgeSA9ICJGcmVxdWVuY3kiKSsKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKCmdncGxvdGx5KHdvcmRfcGxvdCwKICAgICAgICAgdG9vbHRpcCA9IGMoInkiLCAidGV4dCIpKQpgYGAKCiMjIyBUb3AgRml2ZSBXb3JkcyBwZXIgVGhlbWUKIyMjIyMgVGhlIHdvcmRzIHRha2VuIGZyb20gaGVhZGxpbmVzIGFjcm9zcyBkaWZmZXJlbnQgbmV3cyBzaXRlcyB3ZXJlIHNvcnRlZCBpbnRvIHRoZW1lIGNhdGVnb3JpZXMgYW5kIHJhbmtlZCBieSBvY2N1cnJlbmNlLiBUaGUgZm9sbG93aW5nIGNvbHVtbiBjaGFydCBkZXNjcmliZXMgdGhlIHRvcCBmaXZlIHdvcmRzIHVzZWQgc29ydGVkIGJ5IHRoZW1lIHdpdGggdGhlIHdvcmQgJ21hbicgYXBwZWFyaW5nIGFsbW9zdCB0cmlwbGUgdGhlIGF2ZXJhZ2Ugd29yZCB1c2UuIENyaW1lIGFuZCB2aW9sZW5jZSBoYXZlIHRoZSBoaWdoZXN0IGF2ZXJhZ2Ugd29yZCBjb3VudCBvZiBhbnkgdGhlbWUuIApcbgoKYGBge3IsIGVjaG89RkFMU0V9CndvcmRfdGhlbWVfcmFuayAlPiUgCiAgZmlsdGVyKGByYW5rYCA8IDYpICU+JSAKICBzZWxlY3QoIWBYYCkgJT4lIAogIGdncGxvdChhZXMoeSA9IGZjdF9yZW9yZGVyKHdvcmQsIHRoZW1lKSwgeCA9IGNvdW50KSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdGhlbWUpKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNWM3MWQxIiwgIiMzMTQzOTQiLCAiIzU2MjdhOCIsICIjODUzNmNmIiwgIiM5NDJmOTkiLCAiI2E4MzhjOSIpKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGxhYnModGl0bGUgPSAiIiwKICAgICAgIHkgPSAiIiwKICAgICAgIHggPSAiIikKYGBgCgoqKiogCgojIyBEYXRhIHRha2VuIGJ5IENvdW50cnkKXG4KCiMjIyBDb3VudHJ5IE1hcFxuCgojIyMjIyBEYXRhIHdhcyB0YWtlbiBmcm9tIG5ld3Mgc2l0ZXMgZnJvbSBmb3VyIGRpZmZlcmVudCBjb3VudHJpZXMgd2l0aCB2YXJ5aW5nIG51bWJlcnMgb2YgbmV3cyBzb3VyY2VzIHVzZWQuIEZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgODYgbmV3IHNpdGVzIHdlcmUgdXNlZC4gRnJvbSB0aGUgVW5pdGVkIEtpbmdkb20sIDQxIG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiBGcm9tIFNvdXRoIEFmcmljYSwgMjMgbmV3cyBzaXRlcyB3ZXJlIHVzZWQuIEZyb20gSW5kaWEsIDM2IG5ld3Mgc2l0ZXMgd2VyZSB1c2VkLiAKXG4KCmBgYHtyLCBmaWcuYWx0PSAiQSB3b3JsZCBtYXAgd2l0aCB0aGUgVVNBLCB0aGUgVUssIFNvdXRoIEFmcmljYSwgYW5kIEluZGlhIGNvbG9yZWQgaW4gZ3JlZW4gdG8gc2lnbmlmeSB3aGVyZSBkYXRhIHdhcyB0YWtlbiBmcm9tLiIsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0Kd29ybGRfbWFwIDwtIG1hcF9kYXRhKCJ3b3JsZCIpCgpoZWFkbGluZV9zaXRlICU+JSAKICBncm91cF9ieShjb3VudHJ5X29mX3B1YikgJT4lIAogIHN1bW1hcmlzZShiaWFzX2NvdW50cnkgPSBtZWFuKGJpYXMpKSAlPiUgCiAgZ2dwbG90KCkgKwogICAgZ2VvbV9tYXAoZGF0YSA9IHdvcmxkX21hcCwgbWFwID0gd29ybGRfbWFwLAogICAgICAgICAgICAgYWVzKGxvbmcsIGxhdCwgbWFwX2lkID0gcmVnaW9uKSwKICAgICAgICAgICAgIGZpbGwgPSAibGlnaHRncmF5IikrCiAgICBnZW9tX21hcChtYXAgPSB3b3JsZF9tYXAsCiAgICAgICAgICAgIGFlcyhtYXBfaWQgPSBgY291bnRyeV9vZl9wdWJgKSwKICAgICAgICAgICAgZmlsbCA9ICJwdXJwbGU0IiwKICAgICAgICAgICAgY29sb3IgPSAicHVycGxlNCIpKwogICAgZXhwYW5kX2xpbWl0cyh4ID0gd29ybGRfbWFwJGxvbmcsIHkgPSB3b3JsZF9tYXAkbGF0KSArIAogICAgdGhlbWVfbWFwKCkKYGBgCgojIyMgQmlhcyBTY29yZSBieSBDb3VudHJ5XG4KIyMjIyMgVGhlIGF2ZXJhZ2UgYmlhcyBvZiBuZXdzIHNpdGVzIG9mdGVuIHZhcmllcyBmcm9tIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJpYXMgdmFsdWVzIGdpdmVuIHRvIGRpZmZlcmVudCBoZWFkbGluZXMuIFRoZSBmb2xsb3dpbmcgY29sdW1uIGNoYXJ0IGRpc3BsYXlzIHRoZSBtZWFuIGJpYXMgYnkgY291bnRyeSBhbG9uZyB3aXRoIHRoZSBtYXhpbXVtIGJpYXMgb2YgYSBoZWFkbGluZSBwdWJsaXNoZWQgYnkgYSBzaXRlIGluIHRoZSBjb3VudHJ5LiBUaGUgbWluaW11bSBiaWFzIHNjb3JlIGlzIHplcm8gZm9yIGFsbCBjb3VudHJpZXMgc28gbm8gdmlzdWFsIHJlcHJlc2VudGF0aW9uIHdhcyBhZGRlZC4KXG4KCmBgYHtyLCBlY2hvPUZBTFNFfQpoZWFkbGluZV9zaXRlICU+JQogIGdyb3VwX2J5KGNvdW50cnlfb2ZfcHViKSAlPiUKICBzdW1tYXJpemUobWVhbl9iaWFzID0gbWVhbihiaWFzKSwgbWF4X2JpYXMgPSBtYXgoYmlhcykpICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2NvbChhZXMoeSA9IGNvdW50cnlfb2ZfcHViLCB4ID0gbWF4X2JpYXMpLCAKICAgICAgICAgICBmaWxsID0gIiNjMmIxZTMiLCB3aWR0aCA9IC43NSkrCiAgZ2VvbV9jb2woYWVzKHkgPSBjb3VudHJ5X29mX3B1YiwgeCA9IG1lYW5fYmlhcyksIAogICAgICAgICAgIHdpZHRoID0gLjUsIGZpbGwgPSAicHVycGxlNCIpKwogIGdlb21fdGV4dChhZXMoeT0gY291bnRyeV9vZl9wdWIsIHggPSBtZWFuX2JpYXMsIGxhYmVsID0gcm91bmQobWVhbl9iaWFzLCAzKSksCiAgICAgICAgICAgIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSkrCiAgZ2VvbV90ZXh0KGFlcyh5PSBjb3VudHJ5X29mX3B1YiwgeCA9IG1heF9iaWFzLCBsYWJlbCA9IHJvdW5kKG1heF9iaWFzLCAzKSksCiAgICAgICAgICAgIGhqdXN0ID0gLTAuMiwgc2l6ZSA9IDMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSkpKwogIGxhYnModGl0bGUgPSAiQXZlcmFnZSBhbmQgTWF4aW11bSBCaWFzIFNjb3JlIiwKICAgICAgIHggPSAiQmlhcyIsCiAgICAgICB5ID0gIiIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci55ID0gZWxlbWVudF9ibGFuaygpLCkKYGBgCgoqKioKCiMjIFBvbGFyaXR5IG9mIFdvcmRzClxuCgojIyMgUG9sYXJpdHkgb3ZlciBUaW1lXG4KIyMjIyMgSW4gdGhpcyBncmFwaCwgd2UgdmlzdWFsaXplIGhvdyB0aGUgcG9sYXJpdHkgb2YgaGVhZGxpbmVzIGhhcyBjaGFuZ2VkIG92ZXIgdGhlIHBhc3QgdGVuIHllYXJzLiBUaGUgcG9sYXJpdHkgc2NvcmVzIHJlcHJlc2VudCBob3cgc2Vuc2F0aW9uYWxpemVkIGEgaGVhZGxpbmUgaXMuIFNlbnNhdGlvbmFsIGhlYWRsaW5lcyBzYWNyaWZpY2UgYWNjdXJhY3kgaW4gYW4gYXR0ZW1wdCB0byBwcm92b2tlIGFuIGVtb3Rpb25hbCByZXNwb25zZSBmcm9tIHJlYWRlcnMuIFRoZXkgYXJlIGRlc2lnbmVkIHRvIGdlbmVyYXRlIGludGVyZXN0IHRocm91Z2ggZW1vdGlvbmFsIG1hbmlwdWxhdGlvbi4gSW4gZ2VuZXJhbCwgdGhlIHBvbGFyaXR5IG9mIG5ld3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGlzIGhpZ2hlciB0aGFuIHRoZSBwb2xhcml0eSBmb3Igb3RoZXIgaGVhZGxpbmVzLiBJbiB0aGUgcGFzdCB0ZW4geWVhcnMsIHBvbGFyaXR5IGhhcyBpbmNyZWFzZWQsIGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwb2xhcml0eSBvZiBoZWFkbGluZXMgYWJvdXQgd29tZW4gYW5kIHRoZSBwb2xhcml0eSBvZiBnZW5lcmFsIGhlYWRsaW5lcyBoYXMgd2lkZW5lZC4KXG4KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpwb2xhcml0eV90aW1lX2FuaW0gPC0gcG9sYXJpdHlfb3Zlcl90aW1lICU+JSAKICBncm91cF9ieShgeWVhcmApICU+JSAKICBzdW1tYXJpc2Uod29tZW5fbWVhbiA9IG1lYW4oYHdvbWVuX3BvbGFyaXR5X21lYW5gKSwKICAgICAgICAgICAgYWxsX21lYW4gPSBtZWFuKGBhbGxfcG9sYXJpdHlfbWVhbmApLAogICAgICAgICAgICB5ZWFyKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX2xpbmUoYWVzKHg9YHllYXJgLCB5PWB3b21lbl9tZWFuYCksIGNvbG9yID0gInB1cnBsZTQiLCBzZSA9IEZBTFNFKSsKICBnZW9tX2xpbmUoYWVzKHg9YHllYXJgLCB5PWBhbGxfbWVhbmApLCBjb2xvciA9ICJibGFjayIsIHNlID0gRkFMU0UpKwogIGdlb21fcG9pbnQoYWVzKHg9YHllYXJgLCB5PWB3b21lbl9tZWFuYCksCiAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiI2MyYjFlMyIsCiAgICAgICAgICAgICBzaXplID0gNSwgc3Ryb2tlID0gMiwgc2hhcGUgPSAyMSkgKwogIGdlb21fcG9pbnQoYWVzKHg9YHllYXJgLCB5PWBhbGxfbWVhbmApLCBzaXplID0gMi41KSsKICBnZW9tX2xhYmVsKGxhYmVsID0gIkhlYWRsaW5lcyBhYm91dCBcbndvbWVuIiwgYWVzKHg9YHllYXJgLCB5PSBgd29tZW5fbWVhbmApLCAKICAgICAgICAgICAgIGNvbG9yID0gInB1cnBsZTQiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKHggPSAwLCB5ID0gMC4wMikpKwogIGdlb21fbGFiZWwobGFiZWwgPSAiSGVhZGxpbmVzIGFib3V0XG5vdGhlciB0b3BpY3MiLCBhZXMoeD1geWVhcmAsIHk9IGBhbGxfbWVhbmApLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSh4ID0gMCwgeSA9IDAuMDE2NSkpKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYsIDIwMTgsIDIwMjApKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIiIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKGNvbG9yID0gImJsYWNrIikpKwogIHRyYW5zaXRpb25fcmV2ZWFsKHllYXIpCgphbmltX3NhdmUoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiLAogICAgICAgICAgYW5pbWF0ZShwb2xhcml0eV90aW1lX2FuaW0sIGVuZF9wYXVzZSA9IDEwKSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoInBvbGFyaXR5X3RpbWVfYW5pbS5naWYiKQpgYGAKCiMjIyBQb2xhcml0eSBvZiBOZXdzIFNpdGVzXG4KIyMjIyMgSW4gdGhlIGdyYXBoIGJlbG93LCB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgYXZlcmFnZSBwb2xhcml0eSBzY29yZSBiZXR3ZWVuIGhlYWRsaW5lcyBhYm91dCB3b21lbiBhbmQgb3RoZXIgaGVhZGxpbmVzIGFyZSBzaG93biBmb3IgZWFjaCBzaXRlLiBUaGUgc2l0ZXMgYXJlIG9yZGVyZWQgYnkgdGhlIGxhcmdlc3QgYXZlcmFnZSBwb2xhcml0eSBvZiBoZWFkbGluZXMgYWJvdXQgd29tZW4uIEFsbW9zdCBldmVyeSBzaXRlJ3MgaGVhZGxpbmVzIGFib3V0IHdvbWVuIGFyZSBtb3JlIHBvbGFyaXppbmcgdGhhbiB0aGVpciBoZWFkbGluZXMgYWJvdXQgb3RoZXIgdG9waWNzLiAKXG4KCmBgYHtyLCBmaWcuaGVpZ2h0PSAyNCwgZmlnLndpZHRoPSA4LCBlY2hvPUZBTFNFfQpwb2xhcml0eV9zaXRlICU+JSAKICBnZ3Bsb3QoKSsKICBnZW9tX3NlZ21lbnQoYWVzKHg9cG9sYXJpdHlfYmFzZSwgeGVuZD1wb2xhcml0eV93b21lbiwgeT1mY3RfcmVvcmRlcihzaXRlLCBwb2xhcml0eV93b21lbiksIHllbmQ9c2l0ZSksIHNpemUgPSAxKSsKICBnZW9tX3BvaW50KGFlcyh4PXBvbGFyaXR5X2Jhc2UsIHkgPSBzaXRlKSwgc2l6ZSA9IDIpKwogIGdlb21fcG9pbnQoYWVzKHg9cG9sYXJpdHlfd29tZW4sIHkgPSBzaXRlKSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIiNjMmIxZTMiLCAKICAgICAgICAgICAgIHNpemUgPSAzLCBzdHJva2UgPSAxLCBzaGFwZSA9IDIxKSsKICBsYWJzKHRpdGxlID0gIiIsCiAgICAgICB5ID0gIiIsCiAgICAgICB4ID0gIlBvbGFyaXR5IikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgoqKioKCiMjIEhlYWRsaW5lIEV4YW1wbGVzXG4KClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KbGFzdF90aHJlZV9oZWFkbGluZXMgPC0gaGVhZGxpbmVfZXhhbXBsZXMgJT4lIAogIHJlbmFtZSgiSGVhZGxpbmUiID0gYGhlYWRsaW5lX25vX3NpdGVgLAogICAgICAgICAiU2l0ZSIgPSBgc2l0ZWAsCiAgICAgICAgICJDb3VudHJ5IiA9IGBjb3VudHJ5YCwKICAgICAgICAgIkJpYXMiID0gYGJpYXNgKSAlPiUKICBhcnJhbmdlKGBCaWFzYCkgJT4lCiAgZGlzdGluY3QoU2l0ZSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lIAogIHNsaWNlKDE6MykgJT4lIAogIHNlbGVjdChgSGVhZGxpbmVgLCBgU2l0ZWAsIGBDb3VudHJ5YCwgYEJpYXNgKQoKbGFzdF90aHJlZV9oZWFkbGluZXNfdGFibGUgPC0gZ3QobGFzdF90aHJlZV9oZWFkbGluZXMpICU+JSAKICB0YWJfaGVhZGVyKHRpdGxlID0gIkxlYXN0IEJpYXNlZCBIZWFkbGluZSBFeGFtcGxlcyIpICU+JSAKICB0YWJfc3R5bGUoc3R5bGUgPSBjZWxsX3RleHQoY29sb3IgPSAicHVycGxlNCIpLAogICAgICAgICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KCkpCgpsYXN0X3RocmVlX2hlYWRsaW5lc190YWJsZQpgYGAKClxuCgpgYGB7ciwgZWNobz1GQUxTRX0KdG9wX3RocmVlX2hlYWRsaW5lcyA8LSBoZWFkbGluZV9leGFtcGxlcyAlPiUgCiAgcmVuYW1lKCJIZWFkbGluZSIgPSBgaGVhZGxpbmVfbm9fc2l0ZWAsCiAgICAgICAgICJTaXRlIiA9IGBzaXRlYCwKICAgICAgICAgIkNvdW50cnkiID0gYGNvdW50cnlgKSAlPiUgCiAgZmlsdGVyKFNpdGUgIT0gImRhaWx5bWFpbC5jby51ayIpICU+JSAKICBtdXRhdGUoQmlhcyA9IHJvdW5kKGJpYXMsIGRpZ2l0cyA9IDMpKSAlPiUgCiAgYXJyYW5nZShkZXNjKGBCaWFzYCkpICU+JQogIGRpc3RpbmN0KFNpdGUsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSAKICBzbGljZSgxOjMpICU+JSAKICBzZWxlY3QoYEhlYWRsaW5lYCwgYFNpdGVgLCBgQ291bnRyeWAsIGBCaWFzYCkKCnRvcF90aHJlZV9oZWFkbGluZXNfdGFibGUgPC0gZ3QodG9wX3RocmVlX2hlYWRsaW5lcykgJT4lIAogIHRhYl9oZWFkZXIodGl0bGUgPSAiTW9zdCBCaWFzZWQgSGVhZGxpbmUgRXhhbXBsZXMiKSAlPiUgCiAgdGFiX3N0eWxlKHN0eWxlID0gY2VsbF90ZXh0KGNvbG9yID0gInB1cnBsZTQiKSwKICAgICAgICAgICAgbG9jYXRpb25zID0gY2VsbHNfYm9keSgpKQoKdG9wX3RocmVlX2hlYWRsaW5lc190YWJsZQpgYGAKXG4KKioqCgojIyBNb3JlIERhdGEgSW5mb3JtYXRpb25cbgojIyMgRGF0YSBDYWxjdWxhdGlvbnNcbgoKCiMjIyMjIFBPTEFSSVRZIENBTENVTEFUSU9OU1xuCldlIG1lYXN1cmUgcG9sYXJpdHkgYnkgcGVyZm9ybWluZyBzZW50aW1lbnQgYW5hbHlzaXMgb24gZWFjaCBoZWFkbGluZSB1c2luZyB0aGUgVmFkZXIgcHl0aG9uIHBhY2thZ2UsIHdoZXJlIGVhY2ggaGVhZGxpbmUgZ2V0cyBhIHNlbnRpbWVudCBzY29yZSBmcm9tIC0xIHRvIDEgKGZyb20gbW9yZSBuZWdhdGl2ZSB0byBtb3JlIHBvc2l0aXZlKS4gQmVjYXVzZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBwb2xhcml0eSwgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgZWFjaCBoZWFkbGluZSdzIHNjb3JlLlxuCgojIyMjIyBCSUFTIENBTENVTEFUSU9OU1xuCldlIG1lYXN1cmUgZ2VuZGVyIGJpYXMgYnkgdHJhY2tpbmcgdGhlIGNvbWJpbmVkIG9jY3VycmVuY2Ugb2YgZ2VuZGVyZWQgbGFuZ3VhZ2UgYW5kIHNvY2lhbCBzdGVyZW90eXBlcyB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCB3b21lbi4gV2UgZG8gdGhpcyBpbiB0d28gc3RlcHM6XG4KCjEpIFdlIGNoZWNrIGlmIGEgaGVhZGxpbmUgY29udGFpbnMgZ2VuZGVyZWQgbGFuZ3VhZ2UgKGkuZS4g4oCcc3Bva2Vzd29tYW4s4oCdIOKAnGNoYWlyd29tYW4s4oCdIOKAnHNoZSzigJ0g4oCcaGVyLOKAnSDigJxicmlkZSzigJ0g4oCcZGF1Z2h0ZXIs4oCdIOKAnGRhdWdodGVycyzigJ0g4oCcZmVtYWxlLOKAnSDigJxmaWFuY2VlLOKAnSDigJxnaXJsLOKAnSDigJxnaXJsZnJpZW5k4oCdIGV0Yy4pLlxuCgoyKSBJZiBpdCBjb250YWlucyBnZW5kZXJlZCBsYW5ndWFnZSwgd2UgdGhlbiBjb3VudCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRoYXQgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc29jaWFsIHN0ZXJlb3R5cGVzIGFib3V0IHdvbWVuIChpLmUuIOKAnHdlYWss4oCdIOKAnG1vZGVzdCzigJ0g4oCcdmlyZ2luLOKAnSDigJxzbHV0LOKAnSDigJx3aG9yZSzigJ0g4oCcc2V4eSzigJ0g4oCcZmVtaW5pbmUs4oCdIOKAnHNlbnNpdGl2ZSzigJ0g4oCcZW1vdGlvbmFsLOKAnSDigJxnZW50bGUs4oCdIOKAnHNvZnQs4oCdIOKAnHByZXR0eSzigJ0g4oCcYml0Y2gs4oCdIOKAnHNleHVhbOKAnSBldGMuKS5cbgoKRmluYWxseSwgd2Ugbm9ybWFsaXplIHRoaXMgY291bnQgZm9yIGFsbCBoZWFkbGluZXMgd2l0aGluIGVhY2ggb3V0bGV0IGFzIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLCBhbmQgd2UgYWdncmVnYXRlIChpLmUuIGF2ZXJhZ2UpIHRoaXMgc2NvcmUgZm9yIGVhY2ggb3V0bGV0LlxuCgojIyMgRGF0YSBTb3VyY2VcbgpodHRwczovL2dpdGh1Yi5jb20vdGhlLXB1ZGRpbmcvZGF0YS90cmVlL21hc3Rlci93b21lbi1pbi1oZWFkbGluZXMKCgoK
>>>>>>> 8000e0777d88f16020f124d0a6f0b5fa6a1bc957